﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SMA.GENTEv1.Dados;

namespace SMA.GENTEv1
{
    public class PessoaDocPis
    {
        #region Variaveis Membro
        /*
         id_pessoa_pis	int
        id_pessoa	int
        numero	varchar(50)
        path	varchar(100)
         */
        private int _idPis;
        private int _idPessoa;
        private string _numero;
        private string _path;
        private GENTEEntities _context;
        #endregion

        #region Parametros
        public int IdPis
        {
            get { return _idPis; }
            set { _idPis = value; }
        }
        public int IdPessoa
        {
            get { return _idPessoa; }
            set { _idPessoa = value; }
        }
        public string Numero
        {
            get { return _numero; }
            set { _numero = value; }
        }
        public string Path
        {
            get { return _path; }
            set { _path = value; }
        }
        #endregion

        #region Construtores
        public PessoaDocPis()
        {
            try
            {
                _context = new GENTEEntities();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public PessoaDocPis(int idPis)
        {
            try
            {
                _context = new GENTEEntities();
                Carregar(idPis);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Privados
        protected void Carregar(int idPis)
        {
            try
            {
                var consulta = from tp in _context.tab_pessoa_documento_pis
                               where tp.id_pessoa_pis == idPis
                               select new
                               {
                                   tp.id_pessoa_pis,
                                   tp.tab_pessoa.Id_pessoa,
                                   tp.numero,
                                   tp.path
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this.IdPis = list.id_pessoa_pis;
                    this.IdPessoa = list.Id_pessoa;
                    this.Numero = list.numero;
                    this.Path = list.path;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        protected void RecuperaId()
        {
            try
            {
                var consulta = from tp in _context.tab_pessoa_documento_pis
                               where tp.tab_pessoa.Id_pessoa == this.IdPessoa
                               && tp.numero == this.Numero
                               orderby tp.id_pessoa_pis descending
                               select tp;

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this.IdPis = list.id_pessoa_pis;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Publicos

        #region Metodos de Selecao
        public List<PessoaDocPis> SelectAll()
        {
            try
            {
                List<PessoaDocPis> listPessoaDocPis = new List<PessoaDocPis>();

                var consulta = from tp in _context.tab_pessoa_documento_pis
                               select new
                               {
                                   tp.id_pessoa_pis,
                                   tp.tab_pessoa.Id_pessoa,
                                   tp.numero,
                                   tp.path
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    PessoaDocPis pis = new PessoaDocPis();
                    pis.IdPis = list.id_pessoa_pis;
                    pis.IdPessoa = list.Id_pessoa;
                    pis.Numero = list.numero;
                    pis.Path = list.path;

                    listPessoaDocPis.Add(pis);
                }

                return listPessoaDocPis;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<PessoaDocPis> SelectPorPessoa(int idPessoa)
        {
            try
            {
                List<PessoaDocPis> listPessoaDocPis = new List<PessoaDocPis>();

                var consulta = from tp in _context.tab_pessoa_documento_pis
                               where tp.tab_pessoa.Id_pessoa == idPessoa
                               select new
                               {
                                   tp.id_pessoa_pis,
                                   tp.tab_pessoa.Id_pessoa,
                                   tp.numero,
                                   tp.path
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    PessoaDocPis pis = new PessoaDocPis();
                    pis.IdPis = list.id_pessoa_pis;
                    pis.IdPessoa = list.Id_pessoa;
                    pis.Numero = list.numero;
                    pis.Path = list.path;

                    listPessoaDocPis.Add(pis);
                }

                return listPessoaDocPis;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos de Persistencia
        public void Salvar()
        {
            try
            {
                if (this.IdPis == 0)
                {
                    tab_pessoa_documento_pis tabPis = new tab_pessoa_documento_pis();
                    tabPis.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this.IdPessoa);
                    tabPis.numero = this.Numero;

                    _context.AddTotab_pessoa_documento_pis(tabPis);
                    _context.SaveChanges();

                    RecuperaId();
                }
                else
                {
                    tab_pessoa_documento_pis tabPis = (from tp in _context.tab_pessoa_documento_pis
                                                       where tp.id_pessoa_pis == this.IdPis
                                                       select tp).First();

                    tabPis.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this.IdPessoa);
                    tabPis.numero = this.Numero;

                    _context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public void AtualizaPath()
        {
            try
            {
                if (this.IdPis != 0)
                {
                    tab_pessoa_documento_pis tabPis = (from tp in _context.tab_pessoa_documento_pis
                                                       where tp.id_pessoa_pis == this.IdPis
                                                       select tp).First();

                    tabPis.path = this.Path;

                    _context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #endregion
    }
}
